package com.ls.service;

import java.util.Date;

/**
 * UV (Unique Visitor) 独立访客
 * - 独立访客，需通过用户IP排重统计数据.
 * - 每次访问都要进行统计。
 * - HyperLogLog，性能好，且存储空间小。
 * DAU (Daily Active User) 每日活跃用户
 * - 日活跃用户，需通过用户ID排重统计数据。
 * - 访问过一次，则认为其活跃.
 * - Bitmap, 性能好、且可以统计精确的结果。
 *
 * @author ls
 * @version v1.0
 * @description 网站数据统计
 * @date 2021/8/23 23:47
 */
public interface DataService {

    /**
     * 功能描述: <br>
     * 记录独立访客
     *
     * @param ip
     * @author ls
     * @date 2021/8/24 0:26
     */
    void recodeUv(String ip);

    /**
     * 功能描述: <br>
     * 统计日期内独立访客数量
     *
     * @param start
     * @param end
     * @return {@link long}
     * @author ls
     * @date 2021/8/23 23:53
     */
    long countUv(Date start, Date end);

    /**
     * 功能描述: <br>
     * 记录日活跃用户
     *
     * @param userId
     * @author ls
     * @date 2021/8/23 23:54
     */
    void recodeDau(int userId);

    /**
     * 功能描述: <br>
     * 统计日期内活跃用户数量
     *
     * @param start
     * @param end
     * @return {@link long}
     * @author ls
     * @date 2021/8/23 23:55
     */
    long countDau(Date start, Date end);

}
